import mishards.exception_codes as codes


class BaseException(Exception):
    code = codes.INVALID_CODE
    message = 'BaseException'

    def __init__(self, message='', metadata=None):
        self.message = self.__class__.__name__ if not message else message
        self.metadata = metadata


class ConnectionConnectError(BaseException):
    code = codes.CONNECT_ERROR_CODE


class ConnectionNotFoundError(BaseException):
    code = codes.CONNECTTION_NOT_FOUND_CODE


class DBError(BaseException):
    code = codes.DB_ERROR_CODE


class TableNotFoundError(BaseException):
    code = codes.TABLE_NOT_FOUND_CODE


class InvalidTopKError(BaseException):
    code = codes.INVALID_TOPK_CODE


class InvalidArgumentError(BaseException):
    code = codes.INVALID_ARGUMENT_CODE


class InvalidRangeError(BaseException):
    code = codes.INVALID_DATE_RANGE_CODE
